package proyecto.login;

import java.io.IOException;
import java.util.List;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionError;
import org.apache.struts.action.ActionErrors;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import proyecto.BusinessLogic.UsuarioBLRemote;
import proyecto.EntityBeans.Usuario;
import util.Common;

public class LoginAction extends Action {
	
	protected Usuario getUsuario(String usuario, String password) {
		UsuarioBLRemote usuarioBLRemote = null;
		final Context context;
		List usuarios = null;
				
		try
		{							
			context = new InitialContext();					
			usuarioBLRemote = (UsuarioBLRemote) context.lookup("UsuarioBL/remote");
		} catch (NamingException e)				{
			e.printStackTrace();
			throw new RuntimeException(e);				
		}	
		
		usuarios = usuarioBLRemote.findByNamePassword(usuario, password);
		
		
		
		
		if (usuarios.size() == 0){
			return null;
		}
		else{
			System.out.println(((Usuario)usuarios.get(0)).toString());
			return (Usuario)usuarios.get(0);			
		}
		
	}
	
	public ActionForward execute(ActionMapping mapping,
								ActionForm form,
								HttpServletRequest request,
								HttpServletResponse response)
								throws IOException, ServletException {
				
		      
		String usuario = ((LoginForm)form).getUsuario();
		String password = ((LoginForm)form).getPassword();
		
		Usuario user = getUsuario(usuario, password);
		
		ActionErrors errors = new ActionErrors();
		
		if (isCancelled(request)){				
			return mapping.findForward(Common.INICIAL);
		}
		else{
			if ( user == null ) {				
				errors.add(ActionErrors.GLOBAL_ERROR,
						new ActionError("Login.error.usuario.desconocido",usuario));
	
				if (!errors.isEmpty()) {
						saveErrors(request, errors);
				}
			}
			else {
				if (user.getRol().getNombre().equals("DOCENTE") || user.getRol().getNombre().equals("ADMINISTRADOR") || user.getRol().getNombre().equals("MADRECOLABORADORA")){
					HttpSession session = request.getSession();
					session.setAttribute("USUARIO", user);
					return (mapping.findForward(Common.SUCCESS));
				}
				else {
					errors.add(ActionErrors.GLOBAL_ERROR,
							new ActionError("Login.error.rol.incorrecto",usuario));
	
					if (!errors.isEmpty()) {
							saveErrors(request, errors);
					}
				}
			}			
		}
		return (mapping.findForward(Common.FAILURE));
	}

	
}
